package com.l024.easysecurity.modules.sys.dao;

import com.l024.easysecurity.common.page.PageParams;
import com.l024.easysecurity.modules.sys.entity.SysRole;
import com.l024.easysecurity.modules.sys.vo.sys.SysRoleVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface SysRoleMapper {
    /**
     * 获取所有的角色
     */
    List<SysRole> getSysRoles();

    /**
     * 添加角色
     */
    void addUserRole(@Param("userId") long userId,@Param("roleId") long roleId);

    /**
     * 根据id查询角色信息
     */
    SysRole getSysRoleById(@Param("id") long id);

    /**
     * 根据name查询角色信息
     */
    SysRole getSysRoleByName(@Param("name") String name);

    /**
     * 根据用户id查询角色id
     */
    Long selectRoldIdByUserId(@Param("userId") long userId);

    /**
     * 更新用户的角色
     */
    void updateUserRoleByUserId(@Param("userId") long userId,@Param("roleId") long roleId);

    /**
     * 删除用户的角色信息
     */
    void delSysUserRole(@Param("userId") long userId);

    /**
     * 获取所有角色以及对应的菜单
     */
    List<SysRole> getRoleAllAndMenu();

    /**
     * 分页查询所有角色以及菜单
     */
    List<SysRoleVo> selectPageSysRoleAllMenu(@Param("sysRole") SysRole sysRole, @Param("pageParams") PageParams pageParam);
    /**
     * 分页条数
     */
    Long selectPageCount(@Param("sysRole") SysRole sysRole);

    /**
     * 添加角色数据
     */
    void addRole(@Param("sysRole") SysRole sysRole);

    /**
     * 删除角色信息
     */
    void delRole(@Param("roleId")long roleId);
    /**
     * 删除角色下的所有权限
     */
    void delRoleAndMenu(@Param("roleId")long roleId);
    /**
     * 根据角色查询是否有用户绑定
     */
    Long selectRoleHasUser(@Param("roleId")long roleId);

    /**
     * 批量添加角色的权限
     */
    void addMenusByRole(@Param("roleId")Long roleId,@Param("menuIds")String[] menuIds);

    /**
     * 根据角色id下查询所有的菜单id
     */
    List<Long> getMenuIdsByRoleId(@Param("roleId")long roleId);

    /**
     * 更新角色信息
     */
    void updateRoleById(@Param("sysRole")SysRoleVo sysRole);
}
